package unrn.isiii.bean;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateJdbcException;
import org.springframework.stereotype.Component;

import unrn.isiii.dao.IUsuarioDao;
import unrn.isiii.model.Usuario;

@Component("usuarioBean")
public class UsuarioBean {

	private static final Logger logger = LoggerFactory
			.getLogger(UsuarioBean.class);

	private Usuario usuario = new Usuario();

	private List<Usuario> usuarios;

	@Autowired
	private IUsuarioDao iUsuarioDao;

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Usuario> getUsuarios() {
		if (usuarios == null) {
			usuarios = getiUsuarioDao().findAll();
		}
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {

		this.usuarios = usuarios;
	}

	public IUsuarioDao getiUsuarioDao() {
		return iUsuarioDao;
	}

	public void setiUsuarioDao(IUsuarioDao iUsuarioDao) {
		this.iUsuarioDao = iUsuarioDao;
	}

	public void save() {
		if (usuario.getId() == null)
			getiUsuarioDao().create(usuario);
		else
			getiUsuarioDao().update(usuario);
		FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Alta",
				"Operación realizada con éxito.");
		if (FacesContext.getCurrentInstance() != null)
			FacesContext.getCurrentInstance().addMessage(null, msg);
		invalidateUsuarios();
		resetUsuario();
	}

	public void eliminar(Long id) {
		try {
			getiUsuarioDao().delete(id);
			FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Borrar", "Operación realizada con éxito.");
			FacesContext.getCurrentInstance().addMessage(null, msg);
		} catch (HibernateJdbcException e) {
			FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
					"Borrar",
					"El usuario tiente relaciones activas. Elimine primero los sitios.");
			FacesContext.getCurrentInstance().addMessage(null, msg);
		} catch (Exception e) {
			FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
					"Borrar", "Error al eliminar." + e.getMessage());
			FacesContext.getCurrentInstance().addMessage(null, msg);
		} finally {
			resetUsuario();
			invalidateUsuarios();
		}

	}

	private void invalidateUsuarios() {
		usuarios = null;
	}

	public void resetUsuario() {
		usuario = new Usuario();
	}

	public void seleccionar(Usuario usuario) {
		setUsuario(usuario);
	}

}
